<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/12/5
 * Time: 9:51
 */
namespace App\Http\Controllers\AliYunOSS;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class AliYunServiceController extends Controller
{
    protected $sign_method = 'md5';
    public  function getAliYunSTS(){
        $url='https://sts.aliyuncs.com/?';
        $Format='JSON';
        $Version='2015-04-01';
        $AccessKeyId=env('STS_AccessKeyId');
        $Signature='';
        $SignatureMethod='HMAC-SHA1';
        $SignatureVersion='1.0';
        $SignatureNonce=$this->randStr(11);
        $Timestamp=date('Y-m-d H:i:s', time());
        $Action='AssumeRole';
        $params=['Format'=>$Format,'Action'=>$Action,'Version'=>$Version,'AccessKeyId'=>$AccessKeyId,'SignatureMethod'=>$SignatureMethod,'SignatureVersion'=>$SignatureVersion,'SignatureNonce'=>$SignatureNonce,'Timestamp'=>$Timestamp];
        return $this->checkSign($params);
    }
    protected function checkSign($params)
    {
        $sign = array_key_exists('Signature', $params) ? $params['Signature'] : '';

//        if (empty($sign)) {
//            return array('status' => false, 'code' => '1006');
//        }
//        unset($params['Signature']);
//        if ($sign != $this->generateSign($params)) {
//            return array('status' => false, 'code' => '1007');
//        }
      //  return array('status' => true, 'code' => '200');
        return $this->generateSign($params);
    }

    /**
     * 生成签名
     * @param  array $params 待校验签名参数
     * @return string|false
     */
    protected function generateSign($params)
    {
        if ($this->sign_method == 'md5') {
            $t = $this->generateMd5Sign($params);
            return $t;
        }

        return false;
    }

    /**
     * md5方式签名
     * @param  array $params 待签名参数
     * @return string
     */
    protected function generateMd5Sign($params)
    {
        ksort($params);
        $tmps = '';
        foreach ($params as $k => $v) {
            $tmps[] = $k .'='. $v.'&';
        }

        $string = implode('', $tmps);
        $string=rtrim($string,'&');
        return $string;
       // return strtoupper(hash_($string));
    }
    /**
     * 随机数字
     * @param $n 随机数的位数
     * @return string
     */
    protected function randStr($n)
    {
        $s = '';
        $str = "1234567890"; // 输出字符集
        $len = strlen($str) - 1;
        for ($i = 0; $i < $n; $i++) {
            $s .= $str[rand(0, $len)];
        }
        return $s;
    }
    /**时间戳
     * @return bool|string
     */
    protected function timeStamp()
    {
        return strtotime('now');
    }
    /**
     * 远程获取数据，GET模式
     * 注意：
     * 1.使用Crul需要修改服务器中php.ini文件的设置，找到php_curl.dll去掉前面的";"就行了
     * 2.文件夹中cacert.pem是SSL证书请保证其路径有效，目前默认路径是：getcwd().'\\cacert.pem'
     * @param $url 指定URL完整路径地址
     * @param $cacert_url 指定当前工作目录绝对路径
     * return 远程输出的数据
     */
    protected function getHttpResponseGET($url)
    {
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_HEADER, 0); // 过滤HTTP头
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//SSL证书认证
        // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
        //curl_setopt($curl, CURLOPT_CAINFO, $cacert_url);//证书地址
        $responseText = curl_exec($curl);
        //var_dump( curl_error($curl) );//如果执行curl过程中出现异常，可打开此开关，以便查看异常内容
        curl_close($curl);
        return $responseText;
    }

    /**
     * 远程获取数据，POST模式
     * 注意：
     * 1.使用Crul需要修改服务器中php.ini文件的设置，找到php_curl.dll去掉前面的";"就行了
     * 2.文件夹中cacert.pem是SSL证书请保证其路径有效，目前默认路径是：getcwd().'\\cacert.pem'
     * @param $url 指定URL完整路径地址
     * @param $cacert_url 指定当前工作目录绝对路径
     * @param $para 请求的数据
     * @param $input_charset 编码格式。默认值：空值
     * return 远程输出的数据
     */
    protected function getHttpResponsePOST($url, $para, $input_charset = '')
    {

        if (trim($input_charset) != '') {
            $url = $url . "_input_charset=" . $input_charset;
        }
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//SSL证书认证
        //curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
        //curl_setopt($curl, CURLOPT_CAINFO, $cacert_url);//证书地址
        curl_setopt($curl, CURLOPT_HEADER, 0); // 过滤HTTP头
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
        curl_setopt($curl, CURLOPT_POST, true); // post传输数据
        curl_setopt($curl, CURLOPT_POSTFIELDS, $para);// post传输数据
        $responseText = curl_exec($curl);
        //var_dump( curl_error($curl) );//如果执行curl过程中出现异常，可打开此开关，以便查看异常内容
        curl_close($curl);

        return $responseText;
    }
}